package leetcode;

public class Q0125 {
    public boolean isPalindrome(String s) {
        int i = 0;
        int j = s.length() - 1;

        while (i < j) {
            while (i < s.length() && !((s.charAt(i) >= 'a' && s.charAt(i) <= 'z') || (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') || (s.charAt(i) >= '0' && s.charAt(i) <= '9'))) {
                i++;
            }
            while (j >= 0 && !((s.charAt(j) >= 'a' && s.charAt(j) <= 'z') || (s.charAt(j) >= 'A' && s.charAt(j) <= 'Z') || (s.charAt(j) >= '0' && s.charAt(j) <= '9'))) {
                j--;
            }
            if (i < j) {
                char a = s.charAt(i) >= 'a' ? (char) (s.charAt(i) - 'a' + 'A') : s.charAt(i);
                char b = s.charAt(j) >= 'a' ? (char) (s.charAt(j) - 'a' + 'A') : s.charAt(j);
                if (a != b) return false;
                i++;
                j--;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        Q0125 sl = new Q0125();
        System.out.println(sl.isPalindrome("A man, a plan, a canal: Panama"));
    }
}
